﻿//给定一个长度为n 的数组，数组中的数为整数。
//请你选择一个非空连续子数组，使该子数组所有数之和尽可能大，子数组最小长度为1。
// 求这个最大值。

//输入描述：
//第一行为一个正整数n ，代表数组的长度。1≤n≤2∗10^5
//第二行为n 个整数ai，用空格隔开，代表数组中的每一个数。∣ai∣≤10^2
//
//输出描述：
//连续子数组的最大之和。

//输入：
//8
//1 - 2 3 10 - 4 7 2 - 5
//
//输出：
//18
//
//说明：
//经分析可知，输入数组的子数组[3, 10, -4, 7, 2]可以求得最大和为18

#include <iostream>
using namespace std;
const int N = 2e5 + 10;
int n;
int dp[N];
int arr[N];
int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> arr[i];
    int ret = -101;
    for (int i = 1; i <= n; i++) {
        dp[i] = max(dp[i - 1], 0) + arr[i];
        ret = max(ret, dp[i]);
    }
    cout << ret << endl;
    return 0;
}